package com.spring.demo5.eg3;


import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

import java.util.Objects;

/**
 * 解析配置类上面@EnvConditional注解，得到环境信息，然后和目前的环境对比，决定返回true还是false
 *
 * @author vhans
 */
public class EnvCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        // 指定当前需要使用的环境，假设是开发环境
        EnvConditional.Env curEnv = EnvConditional.Env.DEV;
        // 获取使用使用条件的类上的@EnvConditional注解中的环境信息
        EnvConditional.Env env = (EnvConditional.Env) Objects.requireNonNull(
                annotatedTypeMetadata.getAllAnnotationAttributes(EnvConditional.class.getName())).get("value").get(0);
        // 只注册满足开发环境的bean
        return curEnv.equals(env);
    }
}
